Pandas Utils
The Python dxapi client offers a utility module for integration with pandas. This module enables efficient reading of data from TimeBase into a pandas DataFrame and storing it from the DataFrame into stream.
Reading data to DataFrame
Utilize the pandas_utils.read_frame function from the dxapi to import data from streams or QQL query into a pandas.DataFrame.
import dxapi
from dxapi import pandas_utils
try:
    db = dxapi.TickDb.createFromUrl("dxtick://localhost:8011")
    db.open(True)
    
    fields=['open', 'close', 'high', 'low'] # Specify fields to read from streams
    symbols=['IBM', 'AAPL'] # Use None for all symbols
    types=['deltix.timebase.api.messages.BarMessage'] # Use None for all types
    df = pandas_utils.read_frame(db,
                                streams=['Daily'],
                                fields=fields,
                                tickers=symbols,
                                types=types,
                                from_time_str='2001-01-01',
                                to_time_str='2001-05-02')
    print(df)
finally:
    if (db.isOpen()):
        db.close()
Valid arguments:
- db (TickDb)TimeBase client instance;
- streams (list[str])List of streams to read data from;
- query (str)QQL query to select data;
- types (list[str])type message filter (- Nonemeans select all types);
- tickers (list[str])symbols filter (- Nonemeans select all symbols);
- fields (list[str])fields list to select;
- from_time (datetime)start time filter;
- to_time (datetime)end time filter;
- from_time_str (str)same as 'from_time', but in string format (ex, 2023-01-23 or 2023-01-23 10:30:00 UTC);
- to_time_str (str)same as 'to_time', but in string format (ex, 2023-01-23 or 2023-01-23 10:30:00 UTC).
If the query parameter is specified, data will be read from the QQL result set; otherwise, it will be retrieved from the streams list.
Write DataFrame to stream
Employ pandas_utils.write_frame in conjunction with pandas_utils.bind_frame.
The pandas_utils.bind_frame function enables you to construct DataFrame to stream bindings, thereby controlling how columns should be matched to the stream's fields.
import dxapi
from dxapi import pandas_utils
try:
    db = dxapi.TickDb.createFromUrl("dxtick://localhost:8011")
    db.open(False)
    
    fields=['open', 'close', 'high', 'low']
    symbols=['IBM', 'AAPL'] # Use None for all symbols
    types=['deltix.timebase.api.messages.BarMessage'] # Use None for all types
    df = pandas_utils.read_frame(db,
                                    streams=['Daily'],
                                    fields=fields,
                                    tickers=symbols,
                                    types=types,
                                    from_time_str='2001-01-01',
                                    to_time_str='2001-05-02')
    print(df)
    
    # Write DataFrame to new stream
    binding = pandas_utils.bind_frame(db, 'Daily_new', df)
    
    # change bindings if need
    pandas_utils.write_frame(db, binding, df)
finally:
    if (db.isOpen()):
        db.close()